package com.ctg.behavior.calc.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import com.ctg.behavior.common.addictions.CtAddictionsCalcRequest;
import com.ctg.behavior.common.addictions.CtAddictionsCalcResult;
import com.ctg.behavior.common.attribution.CtAttributionCalcRequest;
import com.ctg.behavior.common.attribution.CtAttributionCalcResult;
import com.ctg.behavior.common.event.CtEventCalcRequest;
import com.ctg.behavior.common.event.CtEventCalcResult;
import com.ctg.behavior.common.event.CtEventVSCalcResult;
import com.ctg.behavior.common.funnel.CtFunnelCalcRequest;
import com.ctg.behavior.common.funnel.CtFunnelCalcResult;
import com.ctg.behavior.common.interval.CtIntervalCalcRequest;
import com.ctg.behavior.common.interval.CtIntervalCalcResult;
import com.ctg.behavior.common.ltv.CtLTVCalcRequest;
import com.ctg.behavior.common.ltv.CtLTVCalcResult;
import com.ctg.behavior.common.properties.CtPropertyValuesCalcRequest;
import com.ctg.behavior.common.properties.CtPropertyValuesCalcResult;
import com.ctg.behavior.common.properties.CtUserPropertiesCalcRequest;
import com.ctg.behavior.common.properties.CtUserPropertiesCalcResult;
import com.ctg.behavior.common.retentions.CtRetentionsCalcRequest;
import com.ctg.behavior.common.retentions.CtRetentionsCalcResult;
import com.ctg.behavior.common.session.CtSessionCalcRequest;
import com.ctg.behavior.common.session.CtSessionCalcResult;
import com.ctg.behavior.common.tracks.CtTracksRequest;
import com.ctg.behavior.common.tracks.CtTracksResult;
import com.ctg.behavior.common.useranalytics.CtUserAnalyticsCalcRequest;
import com.ctg.behavior.common.useranalytics.CtUserAnalyticsCalcResult;
import com.ctg.behavior.common.userbehavior.CtUBCalcRequest;
import com.ctg.behavior.common.userbehavior.CtUBCalcResult;
import com.ctg.behavior.common.usergroups.CtUGCalcRequest;
import com.ctg.behavior.common.usergroups.CtUGCalcResult;
import com.ctg.behavior.common.userpath.CtUserPathCalcRequest;
import com.ctg.behavior.common.userpath.CtUserPathCalcResult;
import com.ctg.behavior.common.usersequence.CtUSCalcRequest;
import com.ctg.behavior.common.usersequence.CtUSCalcResult;
import com.ctg.behavior.common.userslist.CtULCalcRequest;
import com.ctg.behavior.common.userslist.CtULCalcResult;

@FeignClient(value = "ctg-behavior-calc-services")
public interface IReportFeignClient {

	/***********************************************
	 ***
	 * 属性计算 - 相关接口
	 ***/
	// 查询属性字段的值信息，支持模糊查询
	@GetMapping("/api/property/values")
	public CtPropertyValuesCalcResult propertyValues(@RequestBody CtPropertyValuesCalcRequest request);

	// 根据设备信息(设备ID)查询用户属性信息
	@GetMapping("/api/property/user/values")
	public CtUserPropertiesCalcResult userValues(@RequestBody CtUserPropertiesCalcRequest request);

	/***********************************************
	 ***
	 * 事件分析计算 - 相关接口
	 ***/
	// 事件分析报告
	@PostMapping("/api/events/report")
	public CtEventCalcResult eventCalcReport(@RequestBody CtEventCalcRequest request);

	// 事件分析报告 - 对比数据
	@PostMapping("/api/events/reportvs")
	public CtEventVSCalcResult doCalcVS(@RequestBody CtEventCalcRequest request);
	
	/***********************************************
	 ***
	 * 漏斗分析计算 - 相关接口
	 ***/
	// 漏斗分析报告
	@PostMapping("/api/funnels/report")
	public CtFunnelCalcResult funnelCalcReport(@RequestBody CtFunnelCalcRequest request);

	/***********************************************
	 ***
	 * LTV分析计算 - 相关接口
	 ***/
	// LTV分析报告
	@PostMapping("/api/ltv/report")
	public CtLTVCalcResult ltvCalcReport(@RequestBody CtLTVCalcRequest request);

	/***********************************************
	 ***
	 * 分布分析计算 - 相关接口
	 ***/
	// 分布分析报告
	@PostMapping("/api/addictions/report")
	public CtAddictionsCalcResult addictionsCalcReport(@RequestBody CtAddictionsCalcRequest request);

	/***********************************************
	 ***
	 * 留存分析计算 - 相关接口
	 ***/
	// 留存分析
	@PostMapping("/api/retentions/report")
	public CtRetentionsCalcResult retentionsCalcReport(@RequestBody CtRetentionsCalcRequest request);

	/***********************************************
	 ***
	 * 用户分群分析计算 - 相关接口
	 ***/
	// 用户分群分析计算
	@PostMapping("/api/userGroups/report/full")
	public CtUGCalcResult userGroupsFullCalcReport(@RequestBody CtUGCalcRequest request);

	// 用户分群人数评估报告
	@PostMapping("/api/userGroups/report/estimate")
	public CtUGCalcResult userGroupsEstimateCalcReport(@RequestBody CtUGCalcRequest request);

	/***********************************************
	 ***
	 * 用户列表分析计算 - 相关接口
	 ***/
	// 用户列表信息
	@PostMapping("/api/users/report/list")
	public CtULCalcResult usersListCalcReport(@RequestBody CtULCalcRequest request);

	/***********************************************
	 ***
	 * 用户路径分析计算 - 相关接口
	 ***/
	// 用户路径分析
	@PostMapping("/api/userpath/report")
	public CtUserPathCalcResult userPathCalcReport(@RequestBody CtUserPathCalcRequest request);

	/***********************************************
	 ***
	 * 用户行为分析计算 - 相关接口
	 ***/
	// 用户行为-事件总量、行为统计
	@PostMapping("/api/users/report/events")
	public CtUBCalcResult usersEventsCalcReport(@RequestBody CtUBCalcRequest request);

	// 用户行为-行为序列(按小时/按明细)
	@PostMapping("/api/users/report/sequence")
	public CtUSCalcResult userSequenceCalcReport(@RequestBody CtUSCalcRequest body);

	/***********************************************
	 ***
	 * 归因分析分析计算 - 相关接口
	 ***/
	// 归因分析
	@PostMapping("/api/attribution/report")
	public CtAttributionCalcResult doCalc(@RequestBody CtAttributionCalcRequest request);

	/***********************************************
	 ***
	 * 间隔分析分析计算 - 相关接口
	 ***/
	// 间隔分析
	@PostMapping("/api/interval/report")
	public CtIntervalCalcResult doCalc(@RequestBody CtIntervalCalcRequest request);


	/***********************************************
	 ***
	 * 会话分析分析计算 - 相关接口
	 ***/
	// 会话分析
	@PostMapping("/api/session/report")
	public CtSessionCalcResult doCalc(@RequestBody CtSessionCalcRequest request);


	/***********************************************
	 ***
	 * 属性分析分析计算 - 相关接口
	 ***/
	// 属性分析
	@PostMapping("/api/useranalytics/report")
	public CtUserAnalyticsCalcResult doCalc(@RequestBody CtUserAnalyticsCalcRequest request);

	/***********************************************
	 ***
	 * 埋点测试查询分析计算 - 相关接口
	 ***/
	// 埋点测试查询计算接口
	@PostMapping("/api/track/testing/report")
	public CtTracksResult tracks(@RequestBody CtTracksRequest request);
	
}
